#!/usr/bin/env python3
"""
自动抢讲座脚本 - 主程序
"""
import sys
from pathlib import Path

# 添加父目录到系统路径
sys.path.insert(0, str(Path(__file__).parent))

from utils.logger import get_logger
from utils.config_loader import ConfigLoader
from core.qr_reader import QRCodeReader
from core.questionnaire import QuestionnaireHandler
from core.scheduler import TaskScheduler

logger = get_logger()


def main():
    """主函数"""
    try:
        logger.info("=" * 60)
        logger.info("自动抢讲座脚本启动")
        logger.info("=" * 60)
        
        # 1. 加载配置文件
        logger.info("\n[步骤 1/4] 加载配置文件...")
        config_loader = ConfigLoader()
        config = config_loader.load()
        
        # 提取配置信息
        user_info = config['user_info']
        qr_code_path = config['questionnaire']['qr_code_path']
        start_time = config['schedule']['start_time']
        custom_answers = config.get('questionnaire', {}).get('custom_answers', {})
        
        logger.info(f"用户姓名：{user_info['name']}")
        logger.info(f"学号：{user_info['student_id']}")
        logger.info(f"班级：{user_info['class_name']}")
        logger.info(f"手机号：{user_info['phone']}")
        
        # 2. 识别二维码
        logger.info("\n[步骤 2/4] 识别二维码...")
        qr_reader = QRCodeReader(qr_code_path)
        questionnaire_url = qr_reader.read()
        
        if not questionnaire_url:
            logger.error("二维码识别失败，程序退出")
            return False
        
        logger.info(f"问卷链接：{questionnaire_url}")
        
        # 3. 创建问卷处理器
        logger.info("\n[步骤 3/4] 初始化问卷处理器...")
        handler = QuestionnaireHandler(questionnaire_url, user_info)
        
        # 提前提取活动ID
        if not handler.extract_activity_id():
            logger.error("无法提取问卷活动ID，程序退出")
            return False
        
        # 准备表单数据
        handler.prepare_form_data(custom_answers)
        logger.info("问卷处理器初始化完成")
        
        # 4. 创建任务函数
        def submit_task():
            """提交任务"""
            return handler.submit()
        
        # 5. 启动调度器
        logger.info("\n[步骤 4/4] 启动任务调度器...")
        scheduler = TaskScheduler(start_time, submit_task)
        scheduler.start(blocking=True)
        
        logger.info("\n" + "=" * 60)
        logger.info("程序执行完毕")
        logger.info("=" * 60)
        
        return True
        
    except FileNotFoundError as e:
        logger.error(f"文件未找到：{e}")
        logger.error("请确保配置文件和二维码图片存在")
        return False
    except ValueError as e:
        logger.error(f"配置错误：{e}")
        return False
    except KeyboardInterrupt:
        logger.warning("\n用户中断程序")
        return False
    except Exception as e:
        logger.error(f"程序执行出错：{e}", exc_info=True)
        return False


if __name__ == '__main__':
    success = main()
    sys.exit(0 if success else 1)

